<?php
// +----------------------------------------------------------------------
// | Author: wyd 2025/11/2
// | DESC: 
// +----------------------------------------------------------------------

declare (strict_types=1);


use Swoole\Coroutine;
use Swoole\Coroutine\WaitGroup;
use function Swoole\Coroutine\run;

//run(function (){
//   //创建协程a
//    go(function (){
//       echo "协程 a 开始，准备睡眠1秒\n";
//       Coroutine::sleep(2);
//       echo "协程a 恢复\n";
//    });
//
//    //创建协程b
//    go(function (){
//        echo "协程b开始\n";
//    });
//});

//输出结果为：
//协程 a 开始，准备睡眠1秒
//协程b开始
//协程a 恢复



\Swoole\Coroutine\run(function () {
    $wg = new WaitGroup();

    $wg->add();
    go(function () use ($wg) {
        defer(function () use ($wg) {
            echo "defer开始\n";

            // 故意抛出异常
            throw new \Exception("测试异常");

            // 这行不会执行
            echo "这行不会输出\n";
            $wg->done();
        });

        echo "协程主体\n";
    });

    echo "等待开始\n";
    $wg->wait(2); // 设置2秒超时
    echo "等待结束\n";
});



